package modelo

import exepciones.perdisteException
import org.uqbar.commons.utils.Observable
 
@Observable
abstract class Atacante {
	@Property String nombre
	@Property int danio
	@Property int resistencia

	def void ataca(Atacante atacado, Observer obs) {
		atacado.sosAtacadoPor(this, obs)
	}

	def sosAtacadoPor(Atacante atacante, Observer obs) {
		this.resistencia = this.resistencia - atacante.getDanio()
		obs.recibiDanio(this, atacante.getDanio)
		if (this.estasMuerto) {
			this.morite(obs, atacante)
		} else {
			this.ataca(atacante, obs)
		}
	}

	def void cambiaObjetivo(Atacante a, Observer obs)

	def boolean estasMuerto() {
		resistencia <= 0
	}

	def void morite(Observer obs, Atacante atac) {
		obs.meMori(this)
		this.postMorten(obs)
		atac.cambiaObjetivo(this, obs)
	}

	def void postMorten(Observer obs)

}
